<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象检测</title>
</head>
<body>
    
</body>
</html>

<script>
    //instanceof
    //某个实例化对象是否在所属类的原型链上
    //这里也就完全说明一个问题，实例化某个对象  这个对象就在此类或者构造方法的原型上或者在其父类的原型上
   
    // function User(){}

    // function Admin(){}

    // Admin.prototype = Object.create(User.prototype);

    // let hd = new Admin();

    // console.log(hd instanceof Admin);//true

    // console.log(hd instanceof User);//true

    // console.log(hd.__proto__ == Admin.prototype);//true

    // console.log(hd.__proto__.__proto__ == User.prototype);//true

    // console.log(checkProtoType(hd,Admin));

    //递归检测原型的代码，帮助分析instanceof的原理
    // function checkProtoType(obj,constructor){
    //     if(!obj.__proto__) return false;
    //     if(obj.__proto__ == constructor.prototype) return true;
    //     return checkProtoType(obj.__proto__,constructor);
    // }


    // //class的内部的实现就是基于原型的  所以使用instanceof判断和上面的是一样的
    // class User{}

    // class Admin extends User{}

    // let hd = new Admin();
    
    // console.log(hd instanceof Admin);

    // console.log(hd instanceof User);


    //使用isPrototypeOf  判断一个对象是否在另外一个对象的原型链上
    // const a = {
    //     name : 'a'
    // };

    // const b = {
    //     __proto__ : a,
    //     name:'b'
    // };

    // const c = {
    //     __proto__ : b,
    //     name : 'c'
    // };

    // //a对象额原型链上是否有b对象
    // console.log(a.isPrototypeOf(b));//true
    // console.log(b.isPrototypeOf(c));

    //下面在使用class语法中使用

    // class User{}

    // class Admin extends User{}

    // let hd = new Admin();

    // //检测Admin 这个原型上是否有hd对象  true
    // console.log(Admin.prototype.isPrototypeOf(hd));

    // console.log(User.prototype.isPrototypeOf(hd));

    


</script>